#pragma once
#include "ConcreteStrategy.hpp"

class MallarDuck : public Duck
{
public:
  MallarDuck(FlyBehavior *fb, QuackBehavior *qb, SwimBehavior* sb)
      : Duck(fb, qb, sb)
  {}

  MallarDuck()
    :Duck(nullptr, nullptr, nullptr)
  {}

  void Display()
  {
    std::cout << "俺是一直绿头鸭" << std::endl;
  }

  ~MallarDuck(){}
};

class RedHeadDuck : public Duck
{
public:
  RedHeadDuck(FlyBehavior* fb, QuackBehavior* qb, SwimBehavior* sb)
  :Duck(fb, qb, sb)
  {}
  
  RedHeadDuck()
    :Duck(nullptr, nullptr, nullptr)
  {}

  void Display()
  {
    std::cout << "俺是一直红头鸭" << std::endl;
  }

  ~RedHeadDuck(){}
};

class DecoyDuck : public Duck
{
public:
  DecoyDuck(FlyBehavior* fb, QuackBehavior* qb, SwimBehavior* sb)
  :Duck(fb, qb, sb)
  {}

  DecoyDuck()
    :Duck(nullptr, nullptr, nullptr)
  {}

  void Display()
  {
    std::cout << "俺是一只诱饵鸭" << std::endl;
  }

  ~DecoyDuck(){}
};

class RubbyDuck : public Duck
{
public:
  RubbyDuck(FlyBehavior *fb, QuackBehavior *qb, SwimBehavior* sb)
      : Duck(fb, qb, sb)
  {}

  RubbyDuck()
    :Duck(nullptr, nullptr, nullptr)
  {}

  void Display()
  {
    std::cout << "俺是小黄橡皮鸭" << std::endl;
  }

  ~RubbyDuck() {}
};
